//wifi
#ifdef ARDUINO_ARCH_ESP32
    #include <WiFi.h>
#elif defined(ARDUINO_ARCH_ESP8266)
    #include <ESP8266WiFi.h>
#endif
//wifimanager
#include <WiFiManager.h>

// 建立WiFiManager对象
WiFiManager wifiManager;

//打印日志
void logWifi(){
  // WiFi连接成功后将通过串口监视器输出连接成功信息
  // WiFi名称
  Serial.print("[MyWifiManager] Connected to ");
  Serial.println(WiFi.SSID());
  // IP
  Serial.print("[MyWifiManager] IP address: ");
  Serial.println(WiFi.localIP());
}

void beforeAutoConnect(){
  //打印日志
  Serial.println("[MyWifiManager] connecting WiFi...");
  //网页配置后是否存储配置信息，一般设置默认不保存，配置完成后设置为保存
  //wifiManager.setSaveConfigCallback(saveConfigCallback);
  //设置超时，以便 ESP 不会挂起等待配置--防止断网后需要配置，但是网络恢复后无法自动联网
  wifiManager.setConfigPortalTimeout(120);
  //可以配置固定ip
  //wifiManager.setSTAStaticIPConfig(IPAddress(10, 0, 1, 99), IPAddress(10, 0, 1, 1), IPAddress(255, 255, 255, 0));
  //设置信号的最小质量，使其忽略低于该质量的AP，默认为8%
  //wifiManager.setMinimumSignalQuality();
  //单位用秒，设置超时，直到配置门户被关闭，这对于使其全部重试或进入睡眠非常有用
  wifiManager.setTimeout(120);
  // 打印调试内容
  wifiManager.setDebugOutput(true);
}

//初始化wifi连接-ap设置ssid
void initWifi(char* apSsid){
  //连接前设置
  beforeAutoConnect();
  // 自动连接WiFi。以下语句的参数是连接ESP时的WiFi名称
  wifiManager.autoConnect(apSsid);
  //打印
  logWifi();
}

//初始化wifi连接-ap设置ssid和password
void initWifi(char* apSsid, char* apPassword){
  //连接前设置
  beforeAutoConnect();
  // 自动连接WiFi。以下语句的参数是连接ESP时的WiFi名称
  wifiManager.autoConnect(apSsid, apPassword);
  //打印
  logWifi();
}

//初始化wifi连接-ap设置ssid和password,wifi设置hostname
void initWifi(char* apSsid, char* apPassword, char* hostname){
  //引用上面的函数
  initWifi(apSsid, apPassword);
  //设置主机名
  WiFi.setHostname(hostname);
  //打印主机名
  Serial.print("[MyWifiManager] HostName: ");
  Serial.println(WiFi.getHostname());
}

//获取wifi状态
bool wifiState(){
  return WiFi.isConnected();
}